#ifndef __resolver_h__
#define __resolver_h__

#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
#include "disjointset.h"

using namespace std;

struct Ruta {
	int ciudad_inicio;
	int ciudad_fin;
	int longitud;

	Ruta() : ciudad_inicio(-1), ciudad_fin(-1), longitud(0) {}
	Ruta(int x, int y, int m) : ciudad_inicio(x), ciudad_fin(y), longitud(m) {}
};

class Resolver {
		int cantFabricas;
		int cantClientes;
		int cantRutas;

		vector<Ruta> rutas;

		list<Ruta> solucion;
		int costoSolucion;

	public:
		Resolver();
		~Resolver();

		void getInput();
		void buscarSolucion();

		friend ostream& operator<<(ostream &os, const Resolver &r);

	private:
		static bool compararRutas(Ruta r1, Ruta r2);
};

ostream& operator<<(ostream &os, const Resolver &r);

#endif /* __resolver_h__ */
